package com.cb2.algorithm.leetcode;

import java.util.ArrayList;
import java.util.List;

/**
 * <a href='https://leetcode.cn/problems/intersection-of-two-arrays'>两个数组的交集(Intersection of Two Arrays)</a>
 * <p>给定两个数组 nums1 和 nums2 ，返回 它们的<b>交集</b>(两个数组的交集定义为两个数组中都存在的元素集合)。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。</p>
 *
 * <p>
 * <b>示例：</b>
 * <pre>
 * 示例 1：
 *      输入：nums1 = [1,2,2,1], nums2 = [2,2]
 *      输出：[2]
 *
 * 示例 2：
 *      输入：nums1 = [4,9,5], nums2 = [9,4,9,8,4]
 *      输出：[9,4]
 *      解释：[4,9] 也是可通过的
 * </pre>
 * </p>
 *
 * <p>
 * <b>提示：</b>
 *     <ul>
 *         <li>1 <= nums1.length, nums2.length <= 1000</li>
 *         <li>0 <= nums1[i], nums2[i] <= 1000</li>
 *     </ul>
 * </p>
 *
 * @author c2b
 * @since 2025/2/7 11:34
 */
public class LC0349IntersectionOfTwoArrays_S {

    static class Solution {
        public int[] intersection(int[] nums1, int[] nums2) {
            int[]num1CntArr = new int[1001];
            int[]num2CntArr = new int[1001];
            for (int n : nums1) {
                num1CntArr[n]++;
            }
            for (int n : nums2) {
                num2CntArr[n]++;
            }
            List<Integer> resList = new ArrayList<>();
            for (int i = 0; i < 1001; i++) {
                if (num1CntArr[i] > 0 && num2CntArr[i] > 0) {
                    resList.add(i);
                }
            }
            int[] res = new int[resList.size()];
            int idx = 0;
            for (int i : resList) {
                res[idx++] = i;
            }
            return res;
        }
    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        Printer.printArrayInt(solution.intersection(new int[]{1, 2, 2, 1}, new int[]{2, 2}));
        Printer.printArrayInt(solution.intersection(new int[]{4, 9, 5}, new int[]{9, 4, 9, 8, 4}));
    }
}
